/* Federal University of Minas Gerais (UFMG)
 * Software Engineering Laboratory (LabSoft)
 * SimulES-SPL Project
 */

package br.ufmg.dcc.simulesspl.model;

import java.lang.String;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/* @author Renato Diniz
 * Esta é a classe Engineer simula as características e ações de um engenheiro de software*/

public class EngineerCard extends Card {

	private static String[] primeirosNomes = {
		"João","Lucas","José","Josélino","Francisco","Chico","Abelardo","Paulo","Diego",
		"Maria","Chiquinha","Larissa","Sandra","Norton","Dragão Dourado","Ana","Diogo",
		"Pedro","Filho do Chefe","Santo","Judas","Tainá","Cristiane","Cristina","Bárbara",
		"Henrique","Deusdei","José","Mário","Mustafá","Bernardo","Eduardo","Mario José","Patrícia",
		"Prestígio","Fillemon","Juan","Jean","Barack","Óliver","Olívia","Bruna","Britto","Maurício"
	};
	private static String[] sobreNomes = {
		"da Silva","Silva","Araújo","de Araújo","Reis","Pinto","Furtado","Santana","Thórum","Allan",
		"Senna","Batista","Charlotte","Bispo","de João","Lagoa","Lage","Caldeira","Martins","Poe",
		"Droslick","Corrêa","Pereira","Brandos","Bradão","Jaque","Lavarini","Soleira","Gava","Jones",
		"Manu","Apanhado","Safad","Amhumeitallajá","Jonas","Hehe","Enamorado","Bravo","de Ouro",
		"Querida","de Maria","de Outro Lugar","Barbosa","Starling","Getuso","Caramelli","de la Cancha",
		"Ochiai","Linda","Menininha","Neve","de Neve","Paloma","Franco","Silvino","Mariano","Café",
		"Drosbros","Cansado","Cabana","Talhado","Telhado","Lavirau","Dinheiro","Grana","Gavalindo",
	};
	
	private int velocity;
	private int skill;
	private int cost;
	
	private String name;
	private static Random random = new Random();

	public EngineerCard(int velocity, int skill, int cost) {
		// TODO we should set a description here
		super("");

		this.velocity = velocity;
		this.skill = skill;
		this.cost = cost;
		
		this.name = generateName();
	}

	private EngineerCard() {
		this(1 + random.nextInt(4), 1 + random.nextInt(4), 1 + random.nextInt(4));
	}

	public static List<EngineerCard> create(int count) {
		List<EngineerCard> result = new ArrayList<EngineerCard>();
		for (int i = 0; i < count; i++) {
			result.add(new EngineerCard());
		}
		return result;
	}

	public int getVelocity() {
		return velocity;
	}

	public int getSkill() {
		return skill;
	}

	public int getCost() {
		return cost;
	}
	
	public String getName(){
		return name;
	}

//	@Override
//	public String toString() {
//		return String.format("VELOCITY=%d\tSKILL=%d\tCOST=%d", velocity, skill, cost);
//	}

	public double getBugProbability() {
		return 0.5 - (skill - 1) * 0.1;
	}
	public static String generateName()
	{
		//Decide os nomes
		int middleName = random.nextInt(sobreNomes.length);
		int lastName = random.nextInt(sobreNomes.length);
		while(lastName==middleName) lastName = random.nextInt(sobreNomes.length);
		
		//Utiliza os nomes
		String name;
		name = primeirosNomes[random.nextInt(primeirosNomes.length)];
		name = name.concat(" ");
		name = name.concat(sobreNomes[middleName]);
		name = name.concat(" ");
		name = name.concat(sobreNomes[lastName]);
		return name;
	}

}
